﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model.Cuotas;

namespace Processes.Cuotas
{
    public class GestorCuotas
    {
        public static void EliminarCobro(Int64 codig)
        {
            try
            {
                DataBase.Cuotas.BDCuotas.EliminarPagoMensual(codig);
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public static void ActualizarCambiosMes(Int64 ci,int dismi,int indi)
        {
            try
            {
                List<string> aux = DataBase.Cuotas.BDCuotas.getCodigosParaCambiar(ci,dismi,indi);
                for (int i = 0; i < aux.Count; i++)
                {
                    string[] poi = aux[i].Split(' ');
                    int aCodigo = Convert.ToInt32( poi[0]);
                    int aIndice = Convert.ToInt32( poi[1]);
                    int nuevoInd = disminuirIndice(aIndice, dismi);
                    int nuevoCantidad = Convert.ToInt32(poi[2]);
                    if (indi == aIndice)
                    {
                        nuevoCantidad = nuevoCantidad - dismi;    
                    }

                    DataBase.Cuotas.BDCuotas.UpdateSiguientes(aCodigo,nuevoInd,nuevoCantidad);
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public static int disminuirIndice(int indi, int dismmi)
        {
            int anio = indi / 100;
            int messs = (indi) - (anio * 100);
            for (int i = 0; i < dismmi; i++)
            {
                if (messs != 1)
                {
                    messs = messs - 1;
                }
                else 
                {
                    messs = 12;
                    anio = anio - 1;
                }
            }
            string res = anio.ToString();
            if (messs > 9)
            {
                res = res + messs;
            }
            else
            {
                res = res + "0" + messs;
            }
            return Convert.ToInt32(res);
        }
        public static List< PagoDeCuota> BuscarCuotaMesPorFecha(DateTime fecha,Int64 carnet)
        {
            try
            {
                return DataBase.Cuotas.BDCuotas.BuscarCuotaMesMiembroPorFecha(fecha,carnet); 
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public static PagoDeCuota BuscarCuotaAnualPorFecha(string fech, Int64 carnet)
        {
            try
            {
                return DataBase.Cuotas.BDCuotas.BuscarCuotaAnioMiembroPorFecha(fech,carnet);
            }
            catch (Exception)
            {

                throw;
            }
        }

        public static PagoDeCuota MetodoBuscarCoutaMes(Int64 NumCarnet)
        {
            try
            {
                return DataBase.Cuotas.BDCuotas.BuscarCuotaMesMiembro(NumCarnet);
            }

            catch (Exception exception)
            {
                throw exception; //gestor
            }

        }
        public static PagoDeCuota MetodoBuscarCuotaAnual(Int64 NumCarnet)
        {
            try
            {
                return DataBase.Cuotas.BDCuotas.BuscarCuotaAnioMiembro(NumCarnet);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public static bool realizarPago(Int64 carnett,string tipomes,string tipoanual,int anteriorIndice)
        {
            bool res1 = false;
            bool res2 = false;
            try
            {
                Int64 ultimo = DataBase.Cuotas.BDCuotas.ultimaCodigo();

                if (tipomes!="0")
	            {
                    int anio = anteriorIndice/100;
                    int aux = anio*100;
                    int mes= anteriorIndice-aux;
                    for (int i = 0; i < Convert.ToInt32( tipomes) ; i++)
			        {
                        
			            if (mes>=12)
	                    {
		                    anio+=1;
                            mes=1;
	                    }
                        else
                        {
                            mes+=1;
                        }
			        }
                    string nuevoIndice;
                    if (mes < 10)
                        nuevoIndice = anio + "0" + mes;
                    else
                        nuevoIndice = (anio.ToString() + mes.ToString());
                    res1 = DataBase.Cuotas.BDCuotas.RealizarCobroMensualPago(carnett,  ultimo + 1);
                    res2 = DataBase.Cuotas.BDCuotas.RealizarCobroMensualPagoCuota( "uno", Convert.ToInt32( nuevoIndice), Convert.ToInt32(tipomes), ultimo + 1);
                    ultimo += 1;
	            }
                if (tipoanual!="")
                {
                    res1 = DataBase.Cuotas.BDCuotas.RealizarCobroMensualPago(carnett, ultimo + 1);
                    res2 = DataBase.Cuotas.BDCuotas.RealizarCobroMensualPagoCuota("dos", Convert.ToInt32(tipoanual),1 , ultimo + 1);
                }

                
                //(Int64 carnet, string tipomes, string tipoAnio, int newIndice, int cantidad)
            }
            catch (Exception e)
            {
                throw e;
            }
            return res1;
        }
    }
}
